package exceptions;
class BaseballException extends Exception{
}
class Foul extends BaseballException{}
class Strike extends BaseballException{}
abstract class Inning{
    public Inning() throws BaseballException{
    }
    public void event()throws RainedOut{}
    public abstract   void atBat()throws Strike,Foul;
    public void walk(){}
}
class StormException extends Exception{}
class RainedOut extends StormException{}
class PopFoul extends Foul{}
interface Storm{
    public void rainHard() throws RainedOut;
}
public class StormyInning extends Inning implements Storm{
    public StormyInning() throws RainedOut,BaseballException {
    }
    public StormyInning(String s)throws Foul,BaseballException{
    }

    @Override
    public void walk() {
    }

    @Override
    public void event()throws RainedOut{

    }

    @Override
    public void rainHard() throws RainedOut {

    }

    @Override
    public void atBat() throws Strike, Foul {

    }

    public static void main(String[] args) {
        try {
            StormyInning s1=new StormyInning();
        }catch (RainedOut e){
            System.out.println("Rained out");
        }catch (BaseballException e){
            System.out.println("Generic baseball exception");
        }
        try {
            Inning i=new StormyInning();
            i.atBat();
        }catch (Strike e){
            System.out.println("Strike");
        }catch (Foul e){
            System.out.println("Foul");
        }catch (RainedOut e){
            System.out.println("Rained out");
        }catch (BaseballException e){
            System.out.println("Generic baseball exception");
        }
    }
}
